 IDENTIFICATION DIVISION.

INSERT PROGRAM-ID

 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 SOURCE-COMPUTER.          HP-VECTRA.
 OBJECT-COMPUTER.          HP-VECTRA.

 INPUT-OUTPUT SECTION.
 FILE-CONTROL.

INSERT FILE ASSIGN
                     ORGANIZATION IS INDEXED
                     ACCESS MODE IS DYNAMIC
INSERT FILE KEY ASSIGN
                     FILE STATUS IS I-O-STATUS.

     SELECT PRINTFILE   ASSIGN TO PRINTER.

 DATA DIVISION.
 FILE SECTION.
*
INSERT FORMOUT8
*
 FD  PRINTFILE        LABEL RECORD IS OMITTED.

 01  PRINT-REC        PIC X(132).
*
 WORKING-STORAGE SECTION.
*
 01  ANS                         PIC X.
 01  PASS-WORD                   PIC XXXXXXXX.
 01  I-O-STATUS                  PIC XX.
 01  SUBD                        PIC S9(5) COMP-0.
 01  PRINT-FLAG                  PIC X.
 01  CONY-FLAG                   PIC S9(5) COMP-0.
 01  SUB132                      PIC S9(5) COMP-0.
 01  SUB80                       PIC S9(5) COMP-0.
 01  LINE-COUNT                  PIC S9(5) COMP-0.
 01  BACK-OUT-FLAG               PIC X.
 01  FUNCTION                    PIC X.
 01  STAR-TALLY                  PIC S9(5) COMP-0.
 01  FOUND-COUNT                 PIC S9(5) COMP-0.
 01  FOUND-COUNT-2               PIC 999999.
 01  COMPARE-SUB                 PIC S9(5) COMP-0.
 01  COMPARE-SUB-2               PIC S9(5) COMP-0.
 01  COMPARE-SUB-MAX             PIC S9(5) COMP-0.
 01  SKIP-KEY-FIELDS             PIC X VALUE "N".
 01  BACK-TAB                    PIC XX.
 01  NUM-2.
     05  NUM2-1                  PIC 9.
     05  NUM2-2                  PIC 9.
 01  NUMBER-2 REDEFINES NUM-2    PIC 99.

 01  NAME-TABLE.
     05  NAME-TAB OCCURS 20 TIMES.
         06  NAME-TAB2 OCCURS 3 TIMES.
             07  NAME-TAB-NUM            PIC ZZ.
             07  NAME-TAB-SLASH          PIC XX.
             07  NAME-TAB-FIELD          PIC X(20).
             07  FILLER                  PIC X(2).

 01  NAME-TAB-SUB                     PIC S9(5) COMP-0.

 01  TYPE-TABLE.
     05  TYPE-TAB OCCURS 90 TIMES    PIC X.

 01  SEARCH-TABLE.
     05  SEARCH-TAB OCCURS 30 TIMES.
         07  FIELD-NO                 PIC 999.
         07  MIN-VALUE-X.
             10  MIN-VALUE-9          PIC S9(11)V9999 COMP-3.
             10  FILLER               PIC X(12).
         07  MAX-VALUE-X.
             10  MAX-VALUE-9          PIC S9(11)V9999 COMP-3.
             10  FILLER               PIC X(12).
         07  INCLUDE-EXCLUDE-FLAG     PIC X.

 01  COMPARE-TABLE.
     05  COMPARE-TAB OCCURS 90 TIMES.
         07  COMPARE-VALUE-X.
             10  COMPARE-VALUE-9      PIC S9(11)V9999 COMP-3.
             10  FILLER               PIC X(12).

INSERT FORMOUT

 PROCEDURE DIVISION.
*
 S-0000-MAIN-SECTION   SECTION 01.
 P-0000-MAIN-PARA.
*

     DISPLAY (1, 1) ERASE.
     PERFORM P-0040-ZERO-TABLES THRU P-0040-ZERO-TABLES-EXIT.
     PERFORM P-0060-LOAD-TABLES THRU P-0060-LOAD-TABLES-EXIT.
*
INSERT OPEN FILE-NAME
     IF I-O-STATUS = 30
INSERT OPEN-OUT FILE-NAME
INSERT CLOSE FILE-NAME
INSERT OPEN FILE-NAME

     MOVE ZERO TO STAR-TALLY.
     INSPECT PRINT-01 TALLYING STAR-TALLY FOR ALL "*".
     IF STAR-TALLY > 1
         DISPLAY PRINT-01.
*
 R-ENTER-FUNCTION.
*
     IF STAR-TALLY > 1
         DISPLAY (2, 1) ERASE
     ELSE
         DISPLAY (1, 1) ERASE.

     DISPLAY (5, 14) "Enter Function (Chg,Del,Fnd,Prt,End)".
     ACCEPT (5, 57) FUNCTION WITH AUTO-SKIP PROMPT.
     ACCEPT BACK-TAB FROM ESCAPE KEY.
     IF BACK-TAB = 01 OR 10
         MOVE "E" TO FUNCTION.

     IF FUNCTION = "E"
INSERT CLOSE FILE-NAME
         STOP RUN.

     IF FUNCTION = "P"
         PERFORM P-90000-PRINT-FILE THRU
                 P-90000-PRINT-EXIT
         CLOSE PRINTFILE
         GO TO R-ENTER-FUNCTION.

     IF FUNCTION NOT = "C" AND "D" AND "F"
         GO TO R-ENTER-FUNCTION.

     IF FUNCTION = "F"
         MOVE "Y" TO SKIP-KEY-FIELDS
         PERFORM P-0050-FIND-FIELDS THRU P-0050-FIND-FIELDS-EXIT
         IF PRINT-FLAG = "P"
             CLOSE PRINTFILE
             GO TO R-ENTER-FUNCTION
         ELSE
             GO TO R-ENTER-FUNCTION.

     PERFORM P-2000-INITIALIZE-FILE-NAMES.
     PERFORM P-3000-MOVE-FILE-TO-DISPLAY.
     PERFORM P-4000-DISPLAY-SCREEN.

     MOVE "N" TO SKIP-KEY-FIELDS.

 R-EXECUTE-FUNCTION.

     PERFORM P-7000-ENTER-DATA THRU P-7000-ENTER-DATA-EXIT.

     IF FUNCTION = "C"
         MOVE "Y" TO SKIP-KEY-FIELDS.

     IF BACK-OUT-FLAG = "Y"
         GO TO R-ENTER-FUNCTION.

     PERFORM P-3000-MOVE-FILE-TO-DISPLAY.
     PERFORM P-4000-DISPLAY-SCREEN.

 DATA-OK.

     DISPLAY (22, 1) ERASE.
     IF FUNCTION = "A" OR "C"
         DISPLAY (22, 10) "Data Ok? (Yes/No/Cancel)"
     ELSE
         DISPLAY (22, 10) "Ok to Delete? (Y/N)".

     ACCEPT (22, 44) ANS WITH PROMPT AUTO-SKIP.
     IF ANS NOT = "Y" AND "N" AND "C"
         GO TO DATA-OK.

     IF ANS = "C"
         MOVE "N" TO SKIP-KEY-FIELDS
         PERFORM P-2000-INITIALIZE-FILE-NAMES
         PERFORM P-3000-MOVE-FILE-TO-DISPLAY
         PERFORM P-4000-DISPLAY-SCREEN
         GO TO R-EXECUTE-FUNCTION.

     IF ANS = "N"
         GO TO R-EXECUTE-FUNCTION.


     IF FUNCTION = "A"
INSERT WRITE FILE-NAME-REC
     ELSE
     IF FUNCTION = "C"
INSERT REWRITE FILE-NAME-REC
     ELSE
     IF FUNCTION = "D"
INSERT DELETE FILE-NAME RECORD.

     PERFORM P-2000-INITIALIZE-FILE-NAMES.
     PERFORM P-3000-MOVE-FILE-TO-DISPLAY.
     PERFORM P-4000-DISPLAY-SCREEN.

     MOVE "N" TO SKIP-KEY-FIELDS.

     GO TO R-EXECUTE-FUNCTION.


 P-0040-ZERO-TABLES.

     MOVE 0 TO NAME-TAB-SUB.

 R-ZERO.

     ADD 1 TO NAME-TAB-SUB.
     IF NAME-TAB-SUB < 21
         MOVE SPACES TO NAME-TAB (NAME-TAB-SUB).
     MOVE SPACES TO TYPE-TAB (NAME-TAB-SUB).
     MOVE SPACES TO COMPARE-TAB (NAME-TAB-SUB).
     IF NAME-TAB-SUB < 60
         GO TO R-ZERO.

 P-0040-ZERO-TABLES-EXIT.
     EXIT.

INSERT REMAINDER

 S-MISC-SECTION        SECTION 03.
 P-0050-FIND-FIELDS.

     DISPLAY (16, 5) "Do you wish to Print,"
              " Modify, Delete or Count (P/M/D/C)" ERASE.
     MOVE "M" TO PRINT-FLAG.
     ACCEPT (16, 65) PRINT-FLAG WITH UPDATE AUTO-SKIP.
     ACCEPT BACK-TAB FROM ESCAPE KEY.
     IF BACK-TAB = 01 OR 10
        GO TO P-0050-FIND-FIELDS-EXIT.
     IF PRINT-FLAG NOT = "P" AND "M" AND "D" AND "C"
         GO TO P-0050-FIND-FIELDS.

     IF PRINT-FLAG = "D"
         DISPLAY (17, 5) "Enter Password to Delete" ERASE
         ACCEPT (17, 30) PASS-WORD WITH PROMPT AUTO-SKIP
                     SPACE-FILL
         IF PASS-WORD NOT = "DELETE"
             GO TO P-0050-FIND-FIELDS.

     IF PRINT-FLAG = "P"
        OPEN OUTPUT PRINTFILE
        MOVE SPACES TO PRINT-REC.

     PERFORM P-0070-DISPLAY-FIND THRU P-0070-DISPLAY-FIND-EXIT.
     PERFORM P-2000-INITIALIZE-FILE-NAMES.
     PERFORM P-3000-MOVE-FILE-TO-DISPLAY.
     PERFORM P-4000-DISPLAY-SCREEN.
     MOVE 0 TO FOUND-COUNT FOUND-COUNT-2.
     MOVE 99 TO LINE-COUNT.
     DISPLAY " ".

INSERT LOW-VALUES RECORD-KEY
         GO TO P-0050-FIND-FIELDS-EXIT.

 R-FIND.


     CALL "KBDAVAIL" USING CONY-FLAG.
     IF CONY-FLAG = "00"
         ACCEPT (22, 75) ANS WITH AUTO-SKIP
         ACCEPT BACK-TAB FROM ESCAPE KEY
         IF BACK-TAB = 09 OR 01
             DISPLAY (24, 2) FOUND-COUNT-2 " Total Records Found"
                 "    Hit Return to Continue"
             ACCEPT ANS
             GO TO P-0050-FIND-FIELDS-EXIT.

INSERT READ-NEXT FILE-NAME
         DISPLAY FOUND-COUNT-2 " Total Records Found"
         DISPLAY "Hit Return to Continue"
         ACCEPT ANS
         GO TO P-0050-FIND-FIELDS-EXIT.

     PERFORM P-0080-MOVE-COMPARE THRU P-0080-MOVE-COMPARE-EXIT.
     MOVE 0 TO COMPARE-SUB.

 R-COMPARE.

     ADD 1 TO COMPARE-SUB.
     IF COMPARE-SUB > COMPARE-SUB-MAX
         GO TO MODIFY-DATA.


     MOVE FIELD-NO (COMPARE-SUB) TO COMPARE-SUB-2.
     IF INCLUDE-EXCLUDE-FLAG (COMPARE-SUB) = "I"
         IF (COMPARE-VALUE-X (COMPARE-SUB-2) <
            MIN-VALUE-X (COMPARE-SUB)) OR
            (COMPARE-VALUE-X (COMPARE-SUB-2) >
            MAX-VALUE-X (COMPARE-SUB))
             GO TO R-FIND.


     IF INCLUDE-EXCLUDE-FLAG (COMPARE-SUB) = "E"
         IF (COMPARE-VALUE-X (COMPARE-SUB-2) NOT <
            MIN-VALUE-X (COMPARE-SUB)) AND
            (COMPARE-VALUE-X (COMPARE-SUB-2) NOT >
            MAX-VALUE-X (COMPARE-SUB))
             GO TO R-FIND.

     GO TO R-COMPARE.

 MODIFY-DATA.

     ADD 1 TO FOUND-COUNT FOUND-COUNT-2.
     IF PRINT-FLAG = "P" OR "C" OR "D"
         IF FOUND-COUNT > 99
             MOVE 0 TO FOUND-COUNT
             DISPLAY FOUND-COUNT-2 " Found so far".

     IF PRINT-FLAG = "C"
         GO TO R-FIND.

     IF PRINT-FLAG = "D"
INSERT DELETE FILE-NAME RECORD.

     IF PRINT-FLAG = "D"
        GO TO R-FIND.

     PERFORM P-3000-MOVE-FILE-TO-DISPLAY.

     IF PRINT-FLAG = "P"
         PERFORM P-0090-PRINT-SCREEN THRU P-0090-PRINT-SCREEN-EXIT
         GO TO R-FIND.

     PERFORM P-4000-DISPLAY-SCREEN
     GO TO DATA-OK-2.

 ADD-ENTER-2.

     PERFORM P-7000-ENTER-DATA THRU P-7000-ENTER-DATA-EXIT.
     IF BACK-OUT-FLAG = "Y"
         GO TO R-FIND.

 DATA-OK-2.

     DISPLAY (22, 10) "Data Ok? (Y/N/C/E)" ERASE.

     MOVE "Y" TO ANS.
     ACCEPT (22, 37) ANS WITH UPDATE AUTO-SKIP.
     IF ANS NOT = "Y" AND "N" AND "C" AND "E"
         GO TO DATA-OK-2.

     IF ANS = "E"
         MOVE 1 TO CONY-FLAG
         GO TO P-0050-FIND-FIELDS-EXIT
     ELSE
     IF ANS = "C"
         GO TO R-FIND
     ELSE
     IF ANS = "N"
             GO TO ADD-ENTER-2.

INSERT REWRITE FILE-NAME-REC

     GO TO R-FIND.

 P-0050-FIND-FIELDS-EXIT.
     EXIT.

 P-0070-DISPLAY-FIND.

     DISPLAY (1, 1) ERASE.
     MOVE 0 TO NAME-TAB-SUB.

 R-DIS-FIND.

     ADD 1 TO NAME-TAB-SUB.
     IF NAME-TAB (NAME-TAB-SUB) = SPACES
         MOVE 20 TO NAME-TAB-SUB
     ELSE
         MOVE NAME-TAB-SUB TO LIN
         DISPLAY (LIN, 1) NAME-TAB (NAME-TAB-SUB).

     IF NAME-TAB-SUB < 20
         GO TO R-DIS-FIND.

     DISPLAY (22, 1)
      "Enter field#      Include or Exclude? (I/E) "
             "   Min value".
     DISPLAY (23, 48) "Max value".

     MOVE 0 TO COMPARE-SUB-MAX.

 R-ENTER-FIELDS.

     ADD 1 TO COMPARE-SUB-MAX.

 ENTER-FIELD-NO.

     ACCEPT (22, 14) FIELD-NO (COMPARE-SUB-MAX) WITH
             PROMPT AUTO-SKIP ZERO-FILL.
     ACCEPT BACK-TAB FROM ESCAPE KEY.
     IF BACK-TAB = 01 OR 10 OR 11
         SUBTRACT 1 FROM COMPARE-SUB-MAX
         GO TO P-0070-DISPLAY-FIND-EXIT.

 ENTER-IE-FLAG.

     MOVE "I" TO INCLUDE-EXCLUDE-FLAG (COMPARE-SUB-MAX).

     ACCEPT (22, 45)
       INCLUDE-EXCLUDE-FLAG (COMPARE-SUB-MAX) WITH
               UPDATE AUTO-SKIP.

     ACCEPT BACK-TAB FROM ESCAPE KEY.
     IF BACK-TAB = 01 OR 10
         GO TO ENTER-FIELD-NO.

     IF INCLUDE-EXCLUDE-FLAG (COMPARE-SUB-MAX) NOT = "I" AND "E"
         GO TO ENTER-IE-FLAG.


 ENTER-MIN.

     MOVE SPACES TO MIN-VALUE-X (COMPARE-SUB-MAX).
     MOVE FIELD-NO (COMPARE-SUB-MAX) TO COMPARE-SUB-2.
     IF TYPE-TAB (COMPARE-SUB-2) = "N"
         ACCEPT (22, 58) MIN-VALUE-9 (COMPARE-SUB-MAX)
             WITH PROMPT AUTO-SKIP ZERO-FILL
         ACCEPT BACK-TAB FROM ESCAPE KEY
         IF BACK-TAB = 10 OR 01
             GO TO ENTER-IE-FLAG
         ELSE
             NEXT SENTENCE
     ELSE
         ACCEPT (22, 58) MIN-VALUE-X (COMPARE-SUB-MAX)
             WITH PROMPT AUTO-SKIP SPACE-FILL
         ACCEPT BACK-TAB FROM ESCAPE KEY
         IF BACK-TAB = 10 OR 01
             GO TO ENTER-IE-FLAG.

 ENTER-MAX.

     MOVE SPACES TO MAX-VALUE-X (COMPARE-SUB-MAX).
     MOVE FIELD-NO (COMPARE-SUB-MAX) TO COMPARE-SUB-2.

     IF TYPE-TAB (COMPARE-SUB-2) = "N"
         ACCEPT (23, 58) MAX-VALUE-9 (COMPARE-SUB-MAX)
             WITH PROMPT AUTO-SKIP ZERO-FILL
         ACCEPT BACK-TAB FROM ESCAPE KEY
         IF BACK-TAB = 10 OR 01
             GO TO ENTER-MIN
         ELSE
             NEXT SENTENCE
     ELSE
         ACCEPT (23, 58) MAX-VALUE-X (COMPARE-SUB-MAX)
             WITH PROMPT AUTO-SKIP SPACE-FILL
         ACCEPT BACK-TAB FROM ESCAPE KEY
         IF BACK-TAB = 10 OR 01
             GO TO ENTER-MIN.

     IF COMPARE-SUB-MAX < 30
         GO TO R-ENTER-FIELDS.

 P-0070-DISPLAY-FIND-EXIT.
     EXIT.

 S-90000-PRINT-SECTION          SECTION 05.

 P-90000-PRINT-FILE.

     MOVE 99 TO LINE-COUNT.
INSERT LOW-VALUES RECORD-KEY
         GO TO P-90000-PRINT-EXIT.

     OPEN OUTPUT PRINTFILE.
     MOVE SPACES TO PRINT-REC.

     MOVE ZERO TO CONY-FLAG.
     MOVE 0 TO FOUND-COUNT FOUND-COUNT-2.

 R-90000-PRINT.

     IF CONY-FLAG NOT = ZERO
         GO TO P-90000-PRINT-EXIT.

INSERT READ-NEXT FILE-NAME
         DISPLAY " "
         DISPLAY (22, 1) FOUND-COUNT-2 " Total Records Printed"
                        ERASE
         DISPLAY (23, 1) "Hit Return to Continue"
         ACCEPT ANS
         GO TO P-90000-PRINT-EXIT.

     ADD 1 TO FOUND-COUNT-2 FOUND-COUNT.
     IF FOUND-COUNT > 99
         MOVE 0 TO FOUND-COUNT
         DISPLAY (22, 1) FOUND-COUNT-2 " Records printed so far".

     PERFORM P-3000-MOVE-FILE-TO-DISPLAY.
     PERFORM P-0090-PRINT-SCREEN THRU P-0090-PRINT-SCREEN-EXIT.

     GO TO R-90000-PRINT.

 P-90000-PRINT-EXIT.
     EXIT.

 P-67000-PRINT-HEAD.

     MOVE PRINT-01 TO PRINT-REC.
     IF LINE-COUNT = 99
         WRITE PRINT-REC AFTER 0
     ELSE
         WRITE PRINT-REC AFTER PAGE.
     MOVE 1 TO LINE-COUNT.

 P-67000-HEAD-EXIT.
     EXIT.

 P-0090-PRINT-SCREEN.

     IF LINE-COUNT > 53
         PERFORM P-67000-PRINT-HEAD THRU
                 P-67000-HEAD-EXIT
     ELSE
         ADD 1 TO LINE-COUNT
         MOVE SPACES TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-02 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-02 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-03 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-03 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-04 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-04 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-05 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-05 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-06 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-06 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-07 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-07 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-08 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-08 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-09 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-09 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-10 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-10 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-11 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-11 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-12 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-12 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-13 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-13 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-14 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-14 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-15 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-15 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-16 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-16 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-17 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-17 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-18 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-18 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-19 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-19 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

     IF PRINT-20 NOT = SPACES
         ADD 1 TO LINE-COUNT
         MOVE PRINT-20 TO PRINT-REC
         WRITE PRINT-REC AFTER 1.

 P-0090-PRINT-SCREEN-EXIT.
     EXIT.


